﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SalaDeEnsayo.WebApplication.SecurityAttributes;
using SalaDeEnsayo.ApplicationService;
using SalaDeEnsayo.ApplicationService.Model.Entity;

namespace SalaDeEnsayo.WebApplication
{
    [RolUsuario]
    [RolAdminSistema]
    public partial class AdministracionSalas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindGrid(null);
                DeshabilitarCampos();
                OcultarCampos();
            }
        }

        #region [ Metodos privados ]

        private void BindGrid(string filtro)
        {
            SalaService SalaS = new SalaService();
            grdSala.DataSource = SalaS.Listar(filtro);
            grdSala.DataBind();
        }

        private void LimpiarCampos()
        {
            txtId_Sala.Text = string.Empty;
            txtNombre.Text = string.Empty;
            txtDescripcion.Text = string.Empty;
            lblDependencia.Visible = false;

        }

        private void DeshabilitarCampos()
        {
            txtId_Sala.Enabled = false;
            txtDescripcion.Enabled = false;
            txtNombre.Enabled = false;
            lblDependencia.Visible = false;
        }

        private void HabilitarCampos()
        {
            txtDescripcion.Enabled = true;
            txtNombre.Enabled = true;
        }

        private void OcultarCampos()
        {
            btnActualizar.Visible = false;
            btnGuardar.Visible = false;
            btnConfirmEliminar.Visible = false;
            btnCancelar.Visible = false;
            lblDependencia.Visible = false;
        }

        private void CargarCamposSala(Sala Sala)
        {
            if (Sala == null)
                return;

            txtId_Sala.Text = Sala.Id_Sala.ToString();
            txtNombre.Text = Sala.Nombre;
            txtDescripcion.Text = Sala.Descripcion;
        }

        #endregion

        //protected void grdSala_PageIndexChanging(object sender, GridViewPageEventArgs e)
        //{
        //    grdSala.PageIndex = e.NewPageIndex;
        //    BindGrid();
        //}

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            string[] var = ((ImageButton)sender).CommandArgument.Split(';');
            SalaService SalaS = new SalaService();
            CargarCamposSala(SalaS.ObtenerPorId(int.Parse(var[0])));

            HabilitarCampos();
            btnGuardar.Visible = false;
            btnActualizar.Visible = true;
            btnConfirmEliminar.Visible = false;
            btnCancelar.Visible = true;
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            string[] var = ((ImageButton)sender).CommandArgument.Split(';');
            SalaService SalaS = new SalaService();

            if (SalaS.TieneDependencias(long.Parse(var[0])))
            {
                lblDependencia.Visible = true;
            }

            CargarCamposSala(SalaS.ObtenerPorId(long.Parse(var[0])));

            btnGuardar.Visible = false;
            btnActualizar.Visible = false;
            btnConfirmEliminar.Visible = true;
            btnCancelar.Visible = true;
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            SalaService SalaS = new SalaService();
            Sala newSala = new Sala();

            if (SalaS.PuedeInsetar(txtNombre.Text.Trim()))
            {
                newSala.Nombre = txtNombre.Text.Trim();
                newSala.Descripcion = txtDescripcion.Text.Trim();

                if (SalaS.AgregarSala(newSala) != 0)
                {
                    Master.ShowMessage("La Sala se agregó correctamente.");
                    BindGrid(null);
                }
                else
                {
                    Master.ShowError("Ocurrió un problema inesperado, por favor intente mas tarde.");
                }

                LimpiarCampos();
                DeshabilitarCampos();
                btnCancelar.Visible = false;
                btnGuardar.Visible = false;
            }
            else
            {
                Master.ShowError("La sala ingresada ya se encuentra registrada, por favor modifiquela y vuelva a intentar.");
                txtNombre.Focus();
            }
            
        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            SalaService SalaS = new SalaService();
            Sala newSala = new Sala();

            newSala.Id_Sala = int.Parse(txtId_Sala.Text);
            newSala.Nombre = txtNombre.Text;
            newSala.Descripcion = txtDescripcion.Text;

            if (SalaS.ModificarSala(newSala) != 0)
            {
                Master.ShowMessage("La Sala se modificó correctamente.");
                BindGrid(null);
            }
            else
            {
                Master.ShowError("Ocurrió un problema inesperado, por favor intente mas tarde.");
            }

            LimpiarCampos();
            DeshabilitarCampos();
            btnCancelar.Visible = false;
            btnActualizar.Visible = false;
        }

        protected void btnConfirmEliminar_Click1(object sender, EventArgs e)
        {
            SalaService SalaS = new SalaService();
            ReservaService reservaS = new ReservaService();

            reservaS.EliminarReservasSala(long.Parse(txtId_Sala.Text));


            if (SalaS.EliminarSala(long.Parse(txtId_Sala.Text)) != 0)
            {
                Master.ShowMessage("La Sala se eliminó correctamente.");
                BindGrid(null);
            }
            else
            {
                Master.ShowError("Ocurrió un problema inesperado, por favor intente mas tarde.");
            }
            LimpiarCampos();
            DeshabilitarCampos();
            btnCancelar.Visible = false;
            btnConfirmEliminar.Visible = false;
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            HabilitarCampos();
            LimpiarCampos();
            btnGuardar.Visible = true;
            btnCancelar.Visible = true;
            btnActualizar.Visible = false;
            btnConfirmEliminar.Visible = false;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            LimpiarCampos();
            DeshabilitarCampos();
            OcultarCampos();
        }

        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            BindGrid(txtBuscar.Text);
        }

        protected void TextCant_TextChanged(object sender, EventArgs e)
        {

        }

        protected void grdSala_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdSala.PageIndex = e.NewPageIndex;
            BindGrid(null);
        }

        protected void grdSala_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}
